precision mediump float;

uniform vec2 u_resolution;
uniform float u_time;

float rectangleSDF(vec2 st, vec2 center, vec2 size) {
    vec2 d = abs(st - center) - size * 0.5;
    return max(d.x, d.y);
}

vec2 translate(vec2 st, vec2 offset) {
    return st + offset;
}

void main() {
    // 将坐标映射到 [0, 1] 范围
    vec2 st = gl_FragCoord.xy / u_resolution;

    // 矩形中心坐标和大小
    vec2 rectCenter = vec2(0.5, 0.5);
    vec2 rectSize = vec2(0.2, 0.1); // 宽度为0.2，高度为0.1

    // 平移偏移量，左右移动在 [0, 1] 范围内
    float translationOffsetX = 0.5 + 0.5 * sin(u_time); // 正弦函数使其左右移动

    // 将矩形进行平移
    vec2 translationOffset = vec2(translationOffsetX, 0.0);
    vec2 translatedSt = translate(st, translationOffset);

    // 计算平移后的矩形的SDF值
    float sdf = rectangleSDF(translatedSt, rectCenter, rectSize);

    // 使用SDF值来定义颜色
    vec3 color = vec3(0.1451, 0.1255, 0.1255); // 红色
    if (sdf < 0.0) {
        color = vec3(0.0, 1.0, 0.0); // 绿色
    }

    // 输出颜色
    gl_FragColor = vec4(color, 1.0);
}
